export const state = () => {
  return {
    // 购物车的数组
    // { id, pic, goodsname, price, count, status }
    cart: []
  }
}

export const mutations = {
  // 初始化购物车列表
  init(state, cart) {
    state.cart = cart
  },
  // 将商品添加到购物车中
  add(state, goods) {
    // 判断商品是否存在于购物车列表中
    const i = state.cart.findIndex((x) => {
      return x.id === goods.id
    })
    // 商品不存在与购物车列表中
    if (i === -1) {
      state.cart.push(goods)
    } else {
      // 只更新数量
      state.cart[i].count += goods.count
    }
    saveCartToStorage(state)
  },
  // 根据Id更新对应商品的数量
  updateCount(state, goods) {
    const i = state.cart.findIndex((x) => {
      return x.id === goods.id
    })
    if (i !== -1) {
      state.cart[i].count = goods.count
    }
    saveCartToStorage(state)
  },
  // 根据Id更新对应商品的状态
  updateStatus(state, goods) {
    const i = state.cart.findIndex((x) => {
      return x.id === goods.id
    })
    if (i !== -1) {
      state.cart[i].status = goods.status
    }
    saveCartToStorage(state)
  },
  // 根据Id删除对应的商品
  remove(state, id) {
    const i = state.cart.findIndex((x) => {
      return x.id === id
    })
    if (i !== -1) {
      state.cart.splice(i, 1)
    }
    saveCartToStorage(state)
  },
  // 点击全选，切换每个商品的选中状态
  changeAllState(state, newStatus) {
    state.cart.forEach((x) => {
      x.status = newStatus
    })
    saveCartToStorage(state)
  }
}

export const getters = {
  // 统计所有商品的数量
  allGoodsCount(state) {
    let c = 0
    state.cart.forEach((x) => {
      c += x.count
    })
    return c
  },
  // 已勾选的商品总价
  amount(state) {
    let total = 0
    state.cart.forEach((x) => {
      if (x.status) {
        total += x.price * x.count
      }
    })
    // 将价格换算成分
    return total * 100
  },
  // 是否全部选中了
  isFullSelected(state) {
    const lenAll = state.cart.length
    const len2 = state.cart.filter((x) => {
      return x.status
    }).length
    // 如果所有商品个数为0，则不需要让全选按钮被选中
    if (lenAll === 0) {
      return false
    }
    return lenAll === len2
  }
}

// 将购物车中的数据持久化存储到 Storage 中
function saveCartToStorage(state) {
  window.localStorage.setItem('cart', JSON.stringify(state.cart))
}
